package start;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;

/**
 * Aufgabe 1 Datenbankenblatt 11
 * @author Dominik Korittki, Steffen Gruschka
 * 
 * Aufgabe a: Siehe Quellcode
 * Aufgabe b: CREATE Statement:
 * 			    Fehlernachricht: ORA-01003: no statement parsed
 * 			    Error Code: 1003, SQL State: 72000
 *              Besonderheiten: Tabelle wurde trotzdem vollständig angelegt
 *            INSERT Statement:
 *              Fehlernachricht: ORA-00900: invalid SQL statement
 * 			    Error Code: 900, SQL State: 42000
 *              Besonderheiten: Inhalt wurde trotzdem korrekt eingefuegt
 *            UPDATE Statement:
 *              Error message: ORA-00900: invalid SQL statement
 *              Error Code: 900, SQL State: 42000
 *              Besonderheiten: Inhalt wurde trotzdem aktualisiert
 *            DELETE Statement:
 *              Error message: ORA-00900: invalid SQL statement
 *              Error Code: 900, SQL State: 42000
 *              Besonderheiten: Inhalt wurde trotzdem gelöscht
 *            DROP TABLE Statement:
 *				Error message: ORA-01003: no statement parsed
 *				Error Code: 1003, SQL State: 72000
 *				Besonderheiten: Tabelle wurde trotzdem gelöscht
 *
 */
public class Aufgabe1 {
	private String dbURL = "jdbc:oracle:thin:@oracle-srv.edvsz.hs-osnabrueck.de:1521:ora11";
	private Scanner ein = new Scanner(System.in);
	private String login;
	private String password;
	Connection conn;
	
	public Aufgabe1() {		
		
		//loading jdbc driver
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
		} catch (ClassNotFoundException e) {
			System.err.println("Could not load JDBC driver.");
			e.printStackTrace();
		}
		
		//request for username and password
		System.out.print("Benutzername: ");
		login = ein.nextLine();
		
		System.out.print("Passwort: ");
		password = ein.nextLine();
		
		
		//connection to db
		try {
			conn = DriverManager.getConnection(dbURL, login, password);
		} catch (SQLException e) {
			System.err.println("ErrorCode: " + e.getErrorCode());
			System.err.print(e.getMessage());
		}
		
		System.out.println("Connected successfully.");
		
		//Aufgabenteil A
		//aufgabenTeilA();
		
		//Aufgabenteil B
		//S. Klassenkommentar
		
		//Aufgabenteil C
		aufgabenTeilC();
		
		
	}
	
	public void aufgabenTeilA() {
		Statement stmt = null;
		try {
			stmt = conn.createStatement();
		} catch (SQLException e1) {
			System.err.println("Could not create statement");
			e1.printStackTrace();
		}
		
		while(true) {
			String statement;
			ResultSet rs = null;
			System.out.print("Your SELECT statement: ");
			statement = ein.nextLine();
			
			if(statement.equals("exit"))
				System.exit(0);
			
			try {
				if(stmt != null)
					rs = stmt.executeQuery(statement);		
				
				while(rs.next()) {
					int knr = rs.getInt("ID");
					String name = rs.getString("name");
					System.out.println("KMR: " + knr + ", NAME: " + name);
				}
				rs.close();
			} catch (SQLException e) {
				System.err.println("Error message: " + e.getMessage() + 
						", Error Code: " + e.getErrorCode() + 
						", SQL State: " + e.getSQLState());
				
			}
			
			
		}
	}
	
	public void aufgabenTeilC() {
		PreparedStatement stmt = null;
		try {
			stmt = conn.prepareStatement("SELECT * FROM kunde1 WHERE name = ?");
		} catch (SQLException e1) {
			System.err.println("Could not create statement");
			e1.printStackTrace();
		}
		
		while(true) {
			String enteredName;
			ResultSet rs = null;
			System.out.print("Enter name: ");
			enteredName = ein.nextLine();
			
			try {
				stmt.setString(1, enteredName);
				rs = stmt.executeQuery();	
				
				while(rs.next()) {
					int knr = rs.getInt("ID");
					String name = rs.getString("name");
					System.out.println("KMR: " + knr + ", NAME: " + name);
				}
				rs.close();
			} catch (SQLException e) {
				System.err.println("Error message: " + e.getMessage() + 
						", Error Code: " + e.getErrorCode() + 
						", SQL State: " + e.getSQLState());
				
			}
		}
	}

	public static void main(String[] args) {
		new Aufgabe1();
	}

}
